package mytest.datenobjekte;

import java.security.SecureRandom;
import java.util.Arrays;
import java.util.UUID;
import java.util.Vector;

public class Fragekatalog {
	/* {author=Lukas Riederle, version=1.0, since=18.11.2009} */

	/**
	 * 
	 * @element-type Frage
	 */
	public Vector<Frage> fragen;

	private final long id;

	public Katalogsammlung kataloge;

	private String name;
	private int noetigeProzentBestanden;

	public Fragekatalog(String name, int noetigeProzentBestanden) {
		id = UUID.randomUUID().getMostSignificantBits();
		this.name = name;
		this.fragen = new Vector<Frage>();
		this.setNoetigeProzent(noetigeProzentBestanden);
	}

	public void addFrage(Frage frage) {
		fragen.add(frage);
	}

	public Fragebogen createFragebogen(int anzahl) {
		int anzahlfragen = fragen.size();
		Vector<Frage> zuUebergebeneFragen = new Vector<Frage>();
		if(anzahlfragen > 20)
			anzahlfragen = 20;
		while(anzahlfragen > zuUebergebeneFragen.size()){
		SecureRandom r = new SecureRandom();
		int zufallszahl = r.nextInt(anzahlfragen);
		if(!zuUebergebeneFragen.contains(fragen.get(zufallszahl)))
		zuUebergebeneFragen.add(fragen.get(zufallszahl));
		}
		return new Fragebogen(zuUebergebeneFragen.toArray(new Frage[0]), this);
	}

	public Frage getFrage(long frageId) {
		for(Frage f:fragen) {
			if(f.getId()==frageId)
				
				return f;
		}
		return null;
	}

	public Frage[] getFragen() {
		return fragen.toArray(new Frage[0]);
	}

	public long getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public int getNoetigeProzent() {
		return noetigeProzentBestanden;
	}

	public void removeFrage(long id) {
		Frage toRemove=null;
		for(Frage f:fragen) {
			if(f.getId()==id) {
				toRemove=f;
				break;
			}
		}
		if(toRemove!=null)
			fragen.remove(toRemove);

	}

	public void setFragen(Frage[] fragen) {
		this.fragen = new Vector<Frage>(Arrays.asList(fragen));
	}

	public void setName(String name) {
		if(name!=null ){
			if(!name.equals("")){
				this.name=name;
			}
			else{
				this.name="null";
			}
			}else{
				this.name ="null";
		}
	}

	public void setNoetigeProzent(int noetigeProzentBestanden) {
		if (noetigeProzentBestanden >= 0 && noetigeProzentBestanden <= 100) {
			this.noetigeProzentBestanden = noetigeProzentBestanden;
		} else {
			this.noetigeProzentBestanden = 50;
		}
	}
}